/* 
  1. 获取用户收货地址
    1. 点击事件
    2. 调用小程序内部内置 api 获取用户的收货地址 wx.chooseAdress

    2. 获取用户对小程序所授予的获取地址的权限状态 scope
      1. 假设用户点击的是确定 authSetting.scope.address
        scope 值是 true 直接调用收货地址
      3. 用户从未调取过收货地址的api
         scope undefined 直接调用收货地址
      2. 假设用户点击的获取地址框 取消
        scope 值是false 
        1. 诱导用户打开授权页面 wx.openSetting，当用户重新给与获取收货地址权限
        2. 获取收货地址
  2. 
    onload onshow
    获取本地存储中的地址数据
    把数据赋值给data中的一个数据
  3. onshow
    1. 获取缓存中的数据
    2. 把购物车数据填充到data中
  4. 全选的实现，数据的展示
    1. onshow中获取缓存中的数组
    2. 根据购物车中的商品数据进行计算 所有的商品都被选中了，checked = true
  5.总价格和总数量
    1. 都需要商品被选中，我们才拿他来计算
    2. 获取购物车数组
    3. 遍历
    4. 判断商品是否被选中
    5. 总价格 += 单价 * 数量
    6. 把计算的价格和数量 设置到data中去
  6. 商品的选中
    1。 绑定事件
    2. 获取到被修改的商品对象
    3. 商品对象的选中状态取反
    4. 重新填充回data中和缓存中
  7. 全选和反选
    1.全选的复选框绑定事件
    2. 获取data中的全选变量
    3.直接取反
    4. 遍历购物车数组，让里面 商品选中状态跟随 allChecked
    5. 购物车数组和选中状态全部设置回data中
  8. 商品数量编辑功能
    1. + - 绑定同一个点击事件
    2. 传递被点击的商品 goods_id
    3. 获取到data中的购物车数组，来获取修要被修改动商品
    4. 当商品数量为1且用户点击的是 -1操作，弹窗提示用户是否删除
      1. 确定 直接删除
      2. 取消 什么都不做
    4. 直接修改商品对象的数量属性
    5 把cart数组重新设置回 缓存中和data中
  9. 用户结算
    1. 用户有没有收货地址
    2. 用户有没有选购商品
    3. 判断以上，跳转结算页面
*/
import { chooseAddress,openSetting, getSetting, showModal,showToast } from '../../utils/asyncWx.js'
import regeneratorRuntime from '../../lib/runtime/runtime';
Page({
  data: {
    address: [],
    cart: [],
    allChecked: false,
    totalPrice: 0, // 总价格，总数量
    totalNum: 0
  },
  onShow() {
    // 获取缓存中的数据
    const address = wx.getStorageSync("address")
    // 获取缓存中购物车数据
    const cart = wx.getStorageSync("cart") || []
    this.setData({
      address
    })
    this.setCart(cart)
  },
  async handleChooseAddress() {
    try {
      // 获取权限状态
      const res1 = await getSetting();
      const scopeAdress = res1.authSetting["scope.address"]
      // 判断权限状态
      if(scopeAdress ===false) {
        // 诱导用户打开授权页面
        await openSetting()
      }
      // 调用收货地址api
      let address = await chooseAddress();
      address.all = address.provinceName + address.cityName + address.countyName + address.detailInfo
      wx.setStorageSync("address", address);
    } catch (error) {
      console.log(error);
    }
  },
  // 商品选中事件
  handleItemChange(e) {
    // 获取被点击的id
    const goods_id = e.currentTarget.dataset.id
    // 获取购物车数组
    let {cart} = this.data;
    // 找到被修改的商品对象
    let index = cart.findIndex( v => v.goods_id === goods_id );
    // 取反
    cart[index].checked = !cart[index].checked
    this.setCart(cart)
  },
  //设置购物车状态，重新计算底部工具栏的数据 全选，总价格，购买数量
  setCart(cart) {
    let allChecked = true
    let totalPrice = 0;
    let totalNum = 0;
    cart.forEach( v => {
      if(v.checked){
        totalPrice += v.num * v.goods_price;
        totalNum += v.num
      } else{
        allChecked = false
      }
   });
    allChecked = cart.length !=0 ? allChecked: false
    // 把购物车数据重新设置给data中和缓存中
    this.setData({
      cart,
      totalPrice,
      totalNum,
      allChecked
    })
    wx.setStorageSync("cart",cart)
  },
  // 全选
  handleItemAllCheck() {
    // 1.获取data中的数据
    let {cart,allChecked} = this.data;
    // 修改值
    allChecked = !allChecked
   // 循环修改cart数组中的选中状态
   cart.forEach(v=>v.checked = allChecked)
   // 修改后的值重新填充回data中,缓存中
   this.setCart(cart)
  },
  // 操作 + -
  async handleItemNumEdit(e) {
    // 1. 获取传递过来的操作符是 1 、-1
    const {operation,id} = e.currentTarget.dataset;
    // 获取购物车数据
    let {cart} = this.data
   // 找到被修改的购物车数据
   const index = cart.findIndex( v => v.goods_id === id)
   // 判断是否要执行
   if(cart[index].num === 1 && operation === -1) {
      const res = await showModal({content:'是否删除该商品'})
        if (res.confirm) {
          cart.splice(index,1)
          this.setCart(cart)
        }
   }else {
    cart[index].num += operation
   // 设置回缓存中，data
   this.setCart(cart)
   }
  },
  // 结算
  async handlePay() {
    // 1. 判断收货地址
    const {address,totalNum} = this.data;
    if (!address.userName) {
      await showToast({title:"您还没有选择收货地址"});
      return;
    }
    if(totalNum===0) {
      await showToast({title:"您还没有选购商品"});
      return
    }
    // 跳转支付
    wx.navigateTo({
      url: '/pages/pay/index'
    });
      
  }
 })